# 导入google_play_scraper库，用于从Google Play商店抓取应用数据
# 重命名为gplay_app以简化调用
from google_play_scraper import app as gplay_app
# 导入sys模块，用于处理命令行参数和标准错误输出
import sys


def get_google_play_app_version(package_name, lang, country):
    """
    从Google Play商店获取指定应用的版本号
    :param package_name: 应用包名(如: com.mobile.legends)
    :param lang: 语言代码(如: en)
    :param country: 国家代码(如: us)
    :return: 成功返回版本号字符串，失败返回None
    """
    try:
        # 检查包名是否为空
        if not package_name:
            # 将错误信息输出到标准错误流(stderr)，Java程序可以捕获
            print("Package name is required", file=sys.stderr)
            return None

        # 调用google-play-scraper库查询应用信息
        # 使用传入的参数而不是硬编码值
        result = gplay_app(
            package_name,  # 应用包名
            lang=lang,  # 查询语言
            country=country  # 查询国家
        )

        # 从查询结果中提取version字段
        version = result.get('version')

        if version:
            # 将版本号打印到标准输出(stdout)，Java程序会捕获这个输出
            print(version)
            return version
        else:
            # 如果结果中没有version字段，输出错误信息到stderr
            print("未找到版本信息", file=sys.stderr)
            return None

    except Exception as e:
        # 捕获所有异常，将详细错误信息输出到stderr
        print(f"错误详情: {repr(e)}", file=sys.stderr)
        return None


# Python脚本的主入口
if __name__ == "__main__":
    """
    处理命令行参数并执行主逻辑
    预期接收3个参数: 
    1. package_name (应用包名)
    2. lang (语言代码)
    3. country (国家代码)
    """

    # 检查命令行参数数量是否正确
    if len(sys.argv) < 4:
        # 输出使用说明到stderr
        print("Usage: python script.py <package_name> <lang> <country>", file=sys.stderr)
        # 以非零状态码退出，表示错误
        sys.exit(1)

    # 从命令行参数获取输入值
    package_name = sys.argv[1]  # 第一个参数是包名
    lang = sys.argv[2]  # 第二个参数是语言代码
    country = sys.argv[3]  # 第三个参数是国家代码

    # 调用主函数获取应用版本
    version = get_google_play_app_version(package_name, lang, country)

    # 检查是否成功获取版本号
    if version is None:
        # 如果失败，以状态码1退出
        sys.exit(1)
    # 成功时默认以状态码0退出